/*
 * BaseEmDao.java
 *
 * Created on November 7, 2007, 4:29 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.radar.services.utilities.dao;


import com.src.computec.radar.base.dao.GenericDAO;
import com.src.computec.radar.base.dao.exception.DAOException;
import com.src.computec.radar.services.base.constantes.ConstantesGenerales;
import com.src.computec.radar.services.utilities.dto.BaseEmDto;
import com.src.computec.radar.services.utilities.dto.BaseExcelDto;
import com.src.computec.radar.services.utilities.dto.ClienteDto;
import com.src.computec.radar.services.utilities.dto.EnvioDto;
import com.src.computec.radar.services.utilities.dto.NodoDto;
import com.src.computec.radar.services.utilities.dto.ProveedorDto;
import static com.src.computec.radar.services.base.constantes.ConstantesGenerales.NO_CLASS_ORIGINAL;
import static com.src.computec.radar.services.base.constantes.ConstantesGenerales.NO_CLASS_NO_GENERADO;
import static com.src.computec.radar.services.base.constantes.ConstantesGenerales.NO_CLASS_GENERADO;
import static com.src.computec.radar.services.base.constantes.ConstantesGenerales.NO_CLASS_RETENCION;
import java.sql.Connection;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;


/**
 *
 * @author fsanchez
 */
public class BaseEmDao extends GenericDAO implements BaseBaseEmDAO {
    private ConstantesGenerales constantesGenerales;
    private String SCHEMA;
    
    
    /** Creates a new instance of BaseEmDao */
    public BaseEmDao() {
	constantesGenerales = ConstantesGenerales.getInstance();
        SCHEMA = constantesGenerales.SCHEMA;
    }
    
    
     /**
     * Retorna una Lista de todas las bases de una empresa de mensajeria
     * @return Lista de BaseEmDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getListadoBases(ProveedorDto proDto,NodoDto nodoDto,ClienteDto cliDto,Date pFechaIni,Date pFechaFin,String pNumeroOrden) throws DAOException{
	List listBases=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        String codigoProveedor_=proDto.getCodigoProveedor()!=null?proDto.getCodigoProveedor():null;
	String codigoNodo_=nodoDto.getCodigoNodo()!=null?nodoDto.getCodigoNodo():null;
	String codigoCliente_=cliDto.getCodigoCliente()!=null?cliDto.getCodigoCliente():null;
	
	
	
	/*	 
	SELECT BAS.CODIGO_BASE, NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PRO.DESCRIPCION_PRODUCTO,BAS.NUMERO_ORDEN,OP.CICLO,BAS.FECHA_PUBLICACION,BAS.CANT_REG,BAS.DESCRIPCION,FMAN.ID_DES,BAS.PATH_BASE
	FROM PRODRAD.BASE_EM BAS 
	LEFT JOIN (SELECT MAX(ID_DESCARGA) AS ID_DES,KEY FROM PRODRAD.FILE_MANAGER BASM GROUP BY KEY) AS FMAN ON FMAN.KEY=BAS.CODIGO_BASE
	INNER JOIN PRODRAD.ORDEN_PROCESO OP ON OP.NUMERO_ORDEN=BAS.NUMERO_ORDEN
	INNER JOIN PRODRAD.NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=BAS.CODIGO_NODO
	INNER JOIN PRODRAD.PROVEEDOR PROV ON PROV.CODIGO_PROVEEDOR=NOD.CODIGO_PROVEEDOR
	INNER JOIN PRODRAD.CLIENTE CLI ON CLI.CODIGO_CLIENTE=OP.CODIGO_CLIENTE 
	INNER JOIN PRODRAD.PRODUCTO PRO ON (PRO.CODIGO_CLIENTE=OP.CODIGO_CLIENTE AND PRO.CODIGO_PRODUCTO=OP.CODIGO_PRODUCTO)
	WHERE PROV.CODIGO_PROVEEDOR=12
	AND OP.CODIGO_CLIENTE=4
	AND BAS.CODIGO_NODO=21
	AND BAS.FECHA_PUBLICACION BETWEEN TIMESTAMP('2007-11-09 11:00:00') AND TIMESTAMP('2007-11-10 23:59:59') 
	AND FMAN.KEY=BAS.CODIGO_BASE
	 */
		
        try {
          con = getConnectionDB2();              
	  
		  String query_="SELECT BAS.CODIGO_BASE, NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PRO.DESCRIPCION_PRODUCTO,BAS.NUMERO_ORDEN,OP.CICLO,BAS.FECHA_PUBLICACION,BAS.CANT_REG,BAS.DESCRIPCION,FMAN.ID_DES,BAS.PATH_BASE, PROV.RAZON_SOCIAL " +
		  "FROM "+SCHEMA+".BASE_EM BAS " +
		  "LEFT JOIN (SELECT MAX(ID_DESCARGA) AS ID_DES,LLAVE FROM "+SCHEMA+".FILE_MANAGER BASM GROUP BY LLAVE) AS FMAN ON FMAN.LLAVE=BAS.CODIGO_BASE " +
		  "INNER JOIN "+SCHEMA+".ORDEN_PROCESO OP ON OP.NUMERO_ORDEN=BAS.NUMERO_ORDEN " +
		  "INNER JOIN "+SCHEMA+".NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=BAS.CODIGO_NODO " +
		  "INNER JOIN "+SCHEMA+".PROVEEDOR PROV ON PROV.CODIGO_PROVEEDOR=NOD.CODIGO_PROVEEDOR " +		  
		  "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE=OP.CODIGO_CLIENTE " +
		  "INNER JOIN "+SCHEMA+".PRODUCTO PRO ON (PRO.CODIGO_CLIENTE=OP.CODIGO_CLIENTE AND PRO.CODIGO_PRODUCTO=OP.CODIGO_PRODUCTO) ";
		  
	  String where_=null;
	  if(codigoProveedor_!=null && !codigoProveedor_.equals("") && !codigoProveedor_.equals("-1")){	  
	    where_="WHERE PROV.CODIGO_PROVEEDOR=" +codigoProveedor_;
	  }
	  if(codigoNodo_!=null && !codigoNodo_.equals("")){
	      if(where_==null){
		  where_="WHERE ";
	      }else{
		  where_+=" AND ";
	      }
	    where_+="BAS.CODIGO_NODO="+codigoNodo_; 
	  }		
	  if(codigoCliente_!=null && !codigoCliente_.equals("")){
	      if(where_==null){
		  where_="WHERE ";
	      }else{
		  where_+=" AND ";
	      }
	    where_+="OP.CODIGO_CLIENTE="+codigoCliente_;
	  } 
	  
	  if(pNumeroOrden!=null && !pNumeroOrden.trim().equals("")){
	      if(where_==null){
		  where_="WHERE ";
	      }else{
		  where_+=" AND ";
	      }
	    where_+="OP.NUMERO_ORDEN="+pNumeroOrden;
	  } 
	  	  
	  
	  if(pFechaIni!=null && pFechaFin!=null){
	      if(where_==null){
		  where_="WHERE ";
	      }else{
		  where_+=" AND ";
	      }
	      //AND BAS.FECHA_PUBLICACION BETWEEN TIMESTAMP('2007-11-09 11:00:00') AND TIMESTAMP('2007-11-10 23:59:59') 
		where_+="BAS.FECHA_PUBLICACION BETWEEN ? AND ?";
	  }
	 
	  
	  
	  if(where_!=null){
	      query_+=where_;
	  }
	  query_+=" ORDER BY BAS.FECHA_PUBLICACION DESC";
	 //System.out.println("Q:"+query_);
	  statement = con.prepareStatement(query_);  
	   if(pFechaIni!=null && pFechaFin!=null){
	      Timestamp ini_=new Timestamp(pFechaIni.getTime());
	      Timestamp fin_=new Timestamp(pFechaFin.getTime());
	      statement.setTimestamp(1,ini_);
	      statement.setTimestamp(2,fin_);
	   }
	  
            rs = statement.executeQuery();
            
            while (rs.next()) 
            {
                int indice1 = 0;
		BaseEmDto baseDto_=new BaseEmDto();
		baseDto_.setCodigoBase(new Integer(rs.getInt(++indice1)));
		baseDto_.setNombreNodo(rs.getString(++indice1));
		baseDto_.setRazonSocialCliente(rs.getString(++indice1));
		baseDto_.setDescProducto(rs.getString(++indice1));
		baseDto_.setNumeroOrden(rs.getString(++indice1));
		baseDto_.setCiclo(rs.getString(++indice1));
		baseDto_.setFechaPublicacion(rs.getTimestamp(++indice1));
		baseDto_.setCantReg(rs.getInt(++indice1));
		baseDto_.setDescripcion(rs.getString(++indice1));
		baseDto_.setFechaDescarga(rs.getTimestamp(++indice1));
		baseDto_.setPathBase(rs.getString(++indice1));
                baseDto_.setNombreProveedor(rs.getString(++indice1));
		listBases.add(baseDto_);
            }
        } 
        catch (SQLException e) 
        {
            throw new DAOException("BaseEmDAO:getListadoBases: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
        return listBases;
    } 
     
     /**
     * Retorna una Lista de todas las descargas y el codigo de responsable de una base
     * @return Lista de BaseEmDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getInfoDescargas(String pCodigoBase) throws DAOException{
	List listDescargas=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        		
        try {
          con = getConnectionDB2();              
	  
		  String query_="SELECT FMAN.ID_DESCARGA,FMAN.CODIGO_RESPONSABLE FROM "+SCHEMA+".FILE_MANAGER FMAN " +
				"INNER JOIN "+SCHEMA+".BASE_EM BAS ON BAS.CODIGO_BASE=FMAN.LLAVE " +
				"WHERE BAS.CODIGO_BASE="+pCodigoBase+" "+
				"ORDER BY FMAN.ID_DESCARGA DESC";
		  
	  
	   statement = con.prepareStatement(query_);  
	   
	  
            rs = statement.executeQuery();
            
            while (rs.next()) 
            {
                int indice1 = 0;
		BaseEmDto baseDto_=new BaseEmDto();
		
		baseDto_.setFechaDescarga(rs.getTimestamp(++indice1));
		baseDto_.setDescripcion(rs.getString(++indice1));
		
		listDescargas.add(baseDto_);
            }
        } 
        catch (SQLException e) 
        {
            throw new DAOException("BaseEmDAO:getInfoDescargas: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
        return listDescargas;
    } 
     
     /**
     * Retorna una lista de bases para empresas de mensajeria
     * @return Lista de Lista BaseExcelDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getBase(String pNumOrden,String pCodigoNodo) throws DAOException{
	List listBaseExcel=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
    
        try {
          con = getConnectionDB2();              
	  /*
	    SELECT NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,DOC.CODIGO_INTERNO_CLIENTE,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO
	    FROM PRODRAD.ENVIO E 
	    INNER JOIN PRODRAD.DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS
	    INNER JOIN PRODRAD.NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO
	    INNER JOIN PRODRAD.CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE
	    INNER JOIN PRODRAD.PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO
	    INNER JOIN PRODRAD.DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO
	    INNER JOIN PRODRAD.MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO)
	    INNER JOIN PRODRAD.CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP)
	    WHERE E.NUMERO_ORDEN=11840 AND E.CODIGO_NODO=68	   
	   */
	
	  String query_="SELECT NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO,E.ZONA_POSTAL " +
		  "FROM "+SCHEMA+".ENVIO E " +
		  //"INNER JOIN "+SCHEMA+".DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS " +
		  "INNER JOIN "+SCHEMA+".NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO " +
		  "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE " +
		  "INNER JOIN "+SCHEMA+".PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO " +
		  "INNER JOIN "+SCHEMA+".DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO " +
		  "INNER JOIN "+SCHEMA+".MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO) " +
		  "INNER JOIN "+SCHEMA+".CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP) " +
		  "INNER JOIN "+SCHEMA+".GESTION_ENVIO GES ON GES.CODIGO_GESTION=E.CODIGO_ULTIMA_GESTION ";
		  
	  
	  StringBuffer where_=new StringBuffer();
	  if(pNumOrden!=null && !pNumOrden.equals("")){
	      where_.append("WHERE E.NUMERO_ORDEN="+pNumOrden);
	      if(pCodigoNodo!=null && !pCodigoNodo.equals("")){
		  where_.append(" AND E.CODIGO_NODO="+pCodigoNodo);
	      }
	      where_.append(" AND E.CODIGO_DEPARTAMENTO!="+constantesGenerales.CODIGO_DANE_VACIO+" AND GES.CODIGO_TIPO_GESTION!="+constantesGenerales.TIPO_GESTION_RETENCION);
	  }
	  
	  query_+=where_.toString();
	 // System.out.println("Q:"+query_);
	  
	    statement = con.prepareStatement(query_);  
	  
	  
            rs = statement.executeQuery();
	  
            while (rs.next()) 
            {
	
                int indice1 = 0;
		BaseExcelDto baseDto_=new BaseExcelDto();
				
		baseDto_.setNombreNodo(rs.getString(++indice1));
		baseDto_.setClienteRazonSoc(rs.getString(++indice1));
		baseDto_.setDescProducto(rs.getString(++indice1));
		baseDto_.setNumOrden(rs.getInt(++indice1));
		baseDto_.setConsecutivoEnvio(rs.getInt(++indice1));
		baseDto_.setCodBarras(rs.getString(++indice1));
		//baseDto_.setCodigoInternoCli(rs.getString(++indice1));
		baseDto_.setDireccion(rs.getString(++indice1));
		baseDto_.setDepartamento(rs.getString(++indice1));
		baseDto_.setMunicipio(rs.getString(++indice1));
		baseDto_.setCentroPoblado(rs.getString(++indice1));
		baseDto_.setZona(rs.getString(++indice1));
		listBaseExcel.add(baseDto_);
            }
        } 
        catch (SQLException e) 
        {
	
	    e.printStackTrace();
            throw new DAOException("BaseEmDAO:getBase: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
        return listBaseExcel;
    }
     
    /**
     * Inserta en bd la descripcion de una base de datos excel generada
     * @return Lista de Lista BaseExcelDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public int insertBaseEm(String pDesc,String path,String pNumOrden,String pCodigoNodo,String pCantReg,String pTipoBase) throws DAOException{
	List listBaseExcel=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
	int ret_=0;
	try {
	      con = getConnectionDB2();       
	    /* INSERT INTO PRODRAD.BASE_EM (CODIGO_RESPONSABLE,DESCRIPCION,PATH_BASE,FECHA_PUBLICACION,NUMERO_ORDEN,CODIGO_NODO,CANT_REG,ESTADO) 
			    VALUES ('fsanchez.computec','Prueba 1' ,'/baseem/base1.xls',{ts '2007-11-09 11:30:05.316'},1,9,100,'0');
	     **/
	      
	      String  query_="INSERT INTO "+SCHEMA+".BASE_EM (DESCRIPCION,PATH_BASE,FECHA_PUBLICACION,NUMERO_ORDEN,CODIGO_NODO,CANT_REG,TIPO_BASE) " +
			     "VALUES (?,?,?,?,?,?,?)";
	      
	      statement=con.prepareStatement(query_);
	      int indice=0;	
	      statement.setObject(++indice,pDesc);
	      statement.setObject(++indice,path);
	      statement.setTimestamp(++indice,new Timestamp(System.currentTimeMillis()));
	      statement.setObject(++indice,pNumOrden);
	      statement.setObject(++indice,pCodigoNodo);
	      statement.setObject(++indice,pCantReg);
	      //statement.setObject(++indice,"0");
	      statement.setObject(++indice,pTipoBase);
	      ret_=statement.executeUpdate();
	    
	} 
	catch (SQLException e) 
	{
	    e.printStackTrace();
	    throw new DAOException("BaseEmDAO:insertBaseEm: " + e.toString(), e);
	}
	finally 
	{
	    closeConnection(con, statement, rs);
	}
	return ret_;
     }
     
     
     /**
     * Retorna una lista de registro para generar la base para empresas de mensajeria
     * @param Lista String codigos de barras
     * @return HashMap de Lista BaseExcelDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
    public HashMap getBaseEmXCodBarras(String pListCodBarras,String pCodigoResponsable) throws DAOException 
    {
        Connection con = null;
        
	PreparedStatement statement4 = null;
	PreparedStatement statementUpdate=null;
	ResultSet result4=null;
	HashMap hashList_=new HashMap();
	 Timestamp todayTime = new Timestamp( (new Date()).getTime() );
	
        try
        {
	      con = getConnectionDB2();
	     //Query para generacion de bases para empresas de mensajeria
	    String query_="SELECT  NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO,E.CODIGO_NODO,E.ZONA_POSTAL " +
			    "FROM PRODRAD.ENVIO E " +
			    //"INNER JOIN "+SCHEMA+".DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN "+SCHEMA+".ENVIO_NOCLAS ENV ON ENV.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN "+SCHEMA+".NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO " +
			    "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE " +
			    "INNER JOIN "+SCHEMA+".PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO " +
			    "INNER JOIN "+SCHEMA+".DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO " +
			    "INNER JOIN "+SCHEMA+".MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO) " +
			    "INNER JOIN "+SCHEMA+".CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP) " +
			    "WHERE ENV.CODIGO_BARRAS in ("+pListCodBarras+") ";
			    
	    
		 String queryUpdate_="UPDATE "+SCHEMA+".ENVIO_NOCLAS SET FECHA_MOVIMIENTO = ?, CODIGO_ESTADO=?, CODIGO_RESPONSABLE=? WHERE CODIGO_BARRAS in ("+pListCodBarras+") ";
            

	    //Query generacion base de empresas de mensajeria 
	    //------------------------------------------------    
	    
	    statement4=con.prepareStatement(query_);
	    result4=statement4.executeQuery();
	    
	    statementUpdate=con.prepareStatement(queryUpdate_);
	    int indice=0;
	    statementUpdate.setObject(++indice,todayTime);
	    statementUpdate.setObject(++indice, constantesGenerales.NO_CLASS_GENERADO);
	    statementUpdate.setObject(++indice, pCodigoResponsable);
	    statementUpdate.executeUpdate();



	    while(result4.next()){


		BaseExcelDto baseDto_=new BaseExcelDto();
		int indice1=0;
		baseDto_.setNombreNodo(result4.getString(++indice1));
		baseDto_.setClienteRazonSoc(result4.getString(++indice1));
		baseDto_.setDescProducto(result4.getString(++indice1));
		baseDto_.setNumOrden(result4.getInt(++indice1));
		baseDto_.setConsecutivoEnvio(result4.getInt(++indice1));
		baseDto_.setCodBarras(result4.getString(++indice1));
		//baseDto_.setCodigoInternoCli(result4.getString(++indice1));
		baseDto_.setDireccion(result4.getString(++indice1));
		baseDto_.setDepartamento(result4.getString(++indice1));
		baseDto_.setMunicipio(result4.getString(++indice1));
		baseDto_.setCentroPoblado(result4.getString(++indice1));	
		baseDto_.setZona(result4.getString(++indice1));
		String codigoNodo_=result4.getString(++indice1);
		String key_=baseDto_.getNumOrden()+"-"+codigoNodo_;
		if(hashList_.containsKey(key_)){
		    ArrayList list_=(ArrayList)hashList_.get(key_);
		    list_.add(baseDto_);
		    //hashList_.put(key_, list_);
		}else{
		    ArrayList list_=new ArrayList();
		    list_.add(baseDto_);
		    hashList_.put(key_,list_);
		}	
	    }
	    
	}catch (SQLException e)
        {
            throw new DAOException("NoClassDAO:getBaseEmXCodBarras: " + e.toString(), e);
        }
        finally
        {
	    closeConnection(null, statementUpdate);
            closeConnection(con, statement4,result4);
        }
        return hashList_;
    }
    
    
     /**
     * Modifica a estado 0 los envios que pasaron de Retencion a distribucion y no se encuentran clasificados
     * @param Lista String codigos de barras 
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
    public void actualizaEstadoARetenidos(String pListCodBarras,String pCodigoResponsable) throws DAOException 
    {
        Connection con = null;
        
	
	PreparedStatement statementUpdate=null;
	
	
	 Timestamp todayTime = new Timestamp( (new Date()).getTime() );
	
        try
        {
	      con = getConnectionDB2();
	    
	    
	    String queryUpdate_="UPDATE "+SCHEMA+".ENVIO_NOCLAS SET FECHA_MOVIMIENTO = ?, CODIGO_ESTADO=?, CODIGO_RESPONSABLE=? WHERE CODIGO_BARRAS in ("+pListCodBarras+") ";
            
	    statementUpdate=con.prepareStatement(queryUpdate_);
	    
	    int indice=0;
	    statementUpdate.setObject(++indice,todayTime);
	    statementUpdate.setObject(++indice, constantesGenerales.NO_CLASS_ORIGINAL);
	    statementUpdate.setObject(++indice, pCodigoResponsable);
	    statementUpdate.executeUpdate();
	    	    
	}catch (SQLException e)
        {
            throw new DAOException("BaseEmDAO:actualizaEstadoARetenidos: " + e.toString(), e);
        }
        finally
        {
	    closeConnection(con, statementUpdate);
            
        }
        
    }
     
     /**
     * Retorna una Lista de nodos por numero orden
     * @return Lista de NodoDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getNodosXNumOrden(String pNumOrden) throws DAOException{
	List listNodos=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        		
        try {
          con = getConnectionDB2();              
	  
		  String query_="SELECT E.CODIGO_NODO " +
			  "FROM "+SCHEMA+".ENVIO E " +
			  "WHERE E.NUMERO_ORDEN=" +pNumOrden+" "+
			  "GROUP BY E.CODIGO_NODO";
		  
	  
	   statement = con.prepareStatement(query_);  
	   
	  
            rs = statement.executeQuery();
            
            while (rs.next()) 
            {
                int indice1 = 0;
		NodoDto nodoDto_=new NodoDto();
		
		nodoDto_.setCodigoNodo(rs.getString(++indice1));
		
		
		listNodos.add(nodoDto_);
            }
        } 
        catch (SQLException e) 
        {
            throw new DAOException("BaseEmDAO:getNodosXNumOrden: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
        return listNodos;
    } 
     
  
    /**
     * Valida que en la base de datos no exista una base ya generada para la orden
     * @param String pCodigoBarras
     * @param String pTipoBase
     * @return String Numero Orden
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public String validarBaseCreadaXNumOrden(String pNumOrden,String pTipoBase) throws DAOException{
	
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        String numOrden_="";
        try {
          con = getConnectionDB2();  
	  String query_="SELECT BAS.NUMERO_ORDEN " +
		  "FROM "+SCHEMA+".BASE_EM BAS " +		
		  "WHERE BAS.NUMERO_ORDEN="+pNumOrden+" AND BAS.TIPO_BASE=" +pTipoBase+
		  " GROUP BY BAS.NUMERO_ORDEN";
	  
	  
	    statement = con.prepareStatement(query_);  
            rs = statement.executeQuery();
            
            while (rs.next()) 
            {
                int indice1 = 0;
		numOrden_=(rs.getString(++indice1));
		
            }
	  
	} 
        catch (SQLException e) 
        {
            throw new DAOException("BaseEmDAO:validarBaseCreadaXNumOrden: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
	return numOrden_;
     }
     

public boolean existeNumOrden(String pNumOrden) throws DAOException{	
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        boolean existe=false;
        try {
          con = getConnectionDB2();  
	  String query_="SELECT NUMERO_ORDEN FROM "+SCHEMA+".ORDEN_PROCESO WHERE NUMERO_ORDEN="+pNumOrden;
	  
	  
	    statement = con.prepareStatement(query_);  
            rs = statement.executeQuery();
            
            while (rs.next()) 
            {
                existe=true;
		
            }
	  
	} 
        catch (SQLException e) 
        {
            throw new DAOException("BaseEmDAO:existeNumOrden: " + e.toString(), e);
        }
        finally 
        {
            closeConnection(con, statement, rs);
        }
	return existe;
}
     
     /**
     * Retorna una lista de ordenes y nodos reasignados que tienen pendiente generacion de base para empresas de mensajeria
     * @return Lista 
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getListaXGenerarBase(String pCodigoEvaluacion,String pReasignacionAplicada) throws DAOException{
	List lista_=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
	ResultSet rs = null;
	try {
          con = getConnectionDB2();     
	 /* SELECT E.NUMERO_ORDEN,E.CODIGO_NODO
		FROM PRODRAD.ENVIO E 
		INNER JOIN PRODRAD.REASIGNACION_DISTRIBUCION_DETALLE REDT ON REDT.CODIGO_BARRAS=E.CODIGO_BARRAS
		INNER JOIN PRODRAD.REASIGNACION_DISTRIBUCION RED ON RED.CODIGO_REASIGNACION=REDT.CODIGO_REASIGNACION
		WHERE RED.CODIGO_EVALUACION=1 AND RED.REASIGNACION_APLICADA=1 AND RED.BASE_GENERADA=0
                GROUP BY E.NUMERO_ORDEN,E.CODIGO_NODO*/
	  String query_="SELECT E.NUMERO_ORDEN,E.CODIGO_NODO " +
		  "FROM PRODRAD.ENVIO E " +
		  "INNER JOIN "+SCHEMA+".REASIGNACION_DISTRIBUCION_DETALLE REDT ON REDT.CODIGO_BARRAS=E.CODIGO_BARRAS " +
		  "INNER JOIN "+SCHEMA+".REASIGNACION_DISTRIBUCION RED ON RED.CODIGO_REASIGNACION=REDT.CODIGO_REASIGNACION " +
		  "WHERE RED.CODIGO_EVALUACION="+pCodigoEvaluacion+" AND RED.REASIGNACION_APLICADA="+pReasignacionAplicada+" AND RED.BASE_GENERADA="+constantesGenerales.BASE_PEND_GENERAR_REASIG+" "+
		  "GROUP BY E.NUMERO_ORDEN,E.CODIGO_NODO";
	  
	  statement=con.prepareStatement(query_);
	  rs=statement.executeQuery();
	  while(rs.next()){
	      int indice_=0;
	      EnvioDto dto_=new EnvioDto();
	      dto_.setNumeroOrden(rs.getString(++indice_));
	      dto_.setCodigoNodo(rs.getString(++indice_));
	      lista_.add(dto_);
	  }
	  
	}catch (SQLException e) {
	
	    e.printStackTrace();
            throw new DAOException("BaseEmDAO:getListaXGenerarBase: " + e.toString(), e);
        }
        finally 
        {
	    
            closeConnection(con, statement, rs);
        }
	return lista_; 
     }
     
     public void updateReasignacionesGeneradas(String pCodigoEvaluacion,String pReasignacionAplicada) throws DAOException{
	  Connection con = null;
	  PreparedStatement statementUpdate = null;
	  String update_="UPDATE "+SCHEMA+".REASIGNACION_DISTRIBUCION SET BASE_GENERADA="+constantesGenerales.BASE_GENERADA_REASIG+" WHERE CODIGO_EVALUACION="+pCodigoEvaluacion+" AND REASIGNACION_APLICADA="+pReasignacionAplicada+" AND BASE_GENERADA="+constantesGenerales.BASE_PEND_GENERAR_REASIG;
	  try {
	    con = getConnectionDB2();   
	    statementUpdate=con.prepareStatement(update_);
	    statementUpdate.executeUpdate();
	 }catch (SQLException e) {	
	    e.printStackTrace();
	    throw new DAOException("BaseEmDAO:updateReasignacionesGeneradas: " + e.toString(), e);
	}catch (NullPointerException ne) {	
	ne.printStackTrace();
	}finally{
	    closeConnection(con, statementUpdate);
	}      
     }
     /**
     * Retorna una lista de bases para empresas de mensajeria reasignadas
     * @return Lista de Lista BaseExcelDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
     public List getBaseReasignacion(String pNumOrden,String pCodigoNodo,String pCodigoEvaluacion,String pReasignacionAplicada) throws DAOException{
	List listBaseExcel=new ArrayList();
        Connection con = null;
        PreparedStatement statement = null;
	
        ResultSet rs = null;
    
        try {
          con = getConnectionDB2();              
	    /*  SELECT NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,DOC.CODIGO_INTERNO_CLIENTE,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO 
		FROM PRODRAD.ENVIO E 
		INNER JOIN PRODRAD.DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS 
		INNER JOIN PRODRAD.NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO 
		INNER JOIN PRODRAD.CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE 
		INNER JOIN PRODRAD.PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO 
		INNER JOIN PRODRAD.DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO 
		INNER JOIN PRODRAD.MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO) 
		INNER JOIN PRODRAD.CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP) 
		INNER JOIN PRODRAD.REASIGNACION_DISTRIBUCION_DETALLE REDT ON REDT.CODIGO_BARRAS=E.CODIGO_BARRAS
		INNER JOIN PRODRAD.REASIGNACION_DISTRIBUCION RED ON RED.CODIGO_REASIGNACION=REDT.CODIGO_REASIGNACION
		WHERE RED.CODIGO_REASIGNACION=164 AND RED.CODIGO_EVALUACION=1 AND RED.REASIGNACION_APLICADA=1*/
	
	  String query_="SELECT NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO,E.ZONA_POSTAL " +
		  "FROM "+SCHEMA+".ENVIO E " +
		//  "INNER JOIN "+SCHEMA+".DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS " +
		  "INNER JOIN "+SCHEMA+".NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO " +
		  "INNER JOIN "+SCHEMA+".CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE " +
		  "INNER JOIN "+SCHEMA+".PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO " +
		  "INNER JOIN "+SCHEMA+".DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO " +
		  "INNER JOIN "+SCHEMA+".MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO) " +
		  "INNER JOIN "+SCHEMA+".CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP) "+
		  "INNER JOIN "+SCHEMA+".REASIGNACION_DISTRIBUCION_DETALLE REDT ON REDT.CODIGO_BARRAS=E.CODIGO_BARRAS " +
		  "INNER JOIN "+SCHEMA+".REASIGNACION_DISTRIBUCION RED ON RED.CODIGO_REASIGNACION=REDT.CODIGO_REASIGNACION " +
		  "WHERE E.NUMERO_ORDEN="+pNumOrden+" AND E.CODIGO_NODO="+pCodigoNodo+" AND RED.CODIGO_EVALUACION="+pCodigoEvaluacion+" AND RED.REASIGNACION_APLICADA="+pReasignacionAplicada+" AND RED.BASE_GENERADA=0 "+
		  "GROUP BY NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO,E.ZONA_POSTAL";
		  
	  
	
	   statement = con.prepareStatement(query_);  
           rs = statement.executeQuery();
	    

            while (rs.next()) 
            {
	
                int indice1 = 0;
		BaseExcelDto baseDto_=new BaseExcelDto();
				
		baseDto_.setNombreNodo(rs.getString(++indice1));
		baseDto_.setClienteRazonSoc(rs.getString(++indice1));
		baseDto_.setDescProducto(rs.getString(++indice1));
		baseDto_.setNumOrden(rs.getInt(++indice1));
		baseDto_.setConsecutivoEnvio(rs.getInt(++indice1));
		baseDto_.setCodBarras(rs.getString(++indice1));
		//baseDto_.setCodigoInternoCli(rs.getString(++indice1));
		baseDto_.setDireccion(rs.getString(++indice1));
		baseDto_.setDepartamento(rs.getString(++indice1));
		baseDto_.setMunicipio(rs.getString(++indice1));
		baseDto_.setCentroPoblado(rs.getString(++indice1));
		baseDto_.setZona(rs.getString(++indice1));
		listBaseExcel.add(baseDto_);
            }
        } 
        catch (SQLException e) 
        {
	
	    e.printStackTrace();
            throw new DAOException("BaseEmDAO:getBaseReasignacion: " + e.toString(), e);
        }
        finally 
        {
	  
            closeConnection(con, statement, rs);
        }
        return listBaseExcel;
    }
     
     
    /**
     * Retorna HashMap Base si debe generar base cuando se han clasificado todos los codigos de barras de una orden 
     * @param String Numero Orden
     * @return HashMap
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
    public HashMap debeGenerarBaseEM(String pNumOrden) throws DAOException 
    {
        Connection con = null;
        
	PreparedStatement statement1 = null;
        PreparedStatement statement2 = null;
	
	ResultSet result1=null;
	ResultSet result2=null;
	HashMap retHash=new HashMap();
	
        try
        {
	      con = getConnectionDB2();
	   //Conteo de Codigos de barras clasificados
	    String query1_="SELECT count(E.CODIGO_BARRAS) " +
		    "FROM "+SCHEMA+".ENVIO_NOCLAS E " +
		    "WHERE E.NUMERO_ORDEN = " +pNumOrden+" "+
		    //"AND (E.CODIGO_DEPARTAMENTO = 0 OR E.CODIGO_DEPARTAMENTO IS NULL)  " +
		    "AND E.CODIGO_ESTADO="+NO_CLASS_NO_GENERADO;
	    
	    //Total de codigos de barras que se deben clasificar restando los que estan en retencion y ya generados que no deberia haber para esa orden
	    String query2_="SELECT count(E.CODIGO_BARRAS) " +
		    "FROM "+SCHEMA+".ENVIO_NOCLAS E " +
		    "WHERE E.NUMERO_ORDEN = " +pNumOrden+" "+
		    //"AND (E.CODIGO_DEPARTAMENTO = 0 OR E.CODIGO_DEPARTAMENTO IS NULL) " +
		    "AND (E.CODIGO_ESTADO="+NO_CLASS_ORIGINAL+" OR E.CODIGO_ESTADO="+NO_CLASS_NO_GENERADO+")";
		        
	    
	    statement1=con.prepareStatement(query1_);
	    result1=statement1.executeQuery();
	    
	    statement2=con.prepareStatement(query2_);
	    result2=statement2.executeQuery();

	    int countEstado1_=0;
	    int countTotal_=0;
	    while(result1.next()){
		int indice1=0;
		countEstado1_=Integer.parseInt(result1.getString(++indice1));
	    }
	    while(result2.next()){
		int indice2=0;
		countTotal_=Integer.parseInt(result2.getString(++indice2));
	    }
	    //Si son iguales significa que ya estan todos clasificados y se debe generar la base
	    //System.out.println("AGRUPADO "+pNumOrden+" ESTADO1="+countEstado1_+"- TOTAL="+countTotal_);
	    if(countEstado1_==countTotal_ && countEstado1_>0){
		//System.out.println("SE GENERARA BASE EM");
		retHash=this.getBaseEmXNumOrden(pNumOrden);
		//System.out.println("#NODOS-retHash.size()="+retHash.size());
	    }else{
		//System.out.println("NO SE GENERA BASE EM");
	    }	    
	}catch (SQLException e)
        {
            throw new DAOException("BaseEmDAO:debeGenerarBaseEM: " + e.toString(), e);
        }
        finally
        {
	    closeConnection(null, statement2,result2);
            closeConnection(con, statement1,result1);
        }
        return retHash;
    }
    
    /**
     * Retorna una lista de registros para generar la base para empresas de mensajeria
     * @param Lista String numero orden
     * @return Lista BaseExcelDto
     * @throws com.src.computec.radar.base.dao.exception.DAOException 
     */
    public HashMap getBaseEmXNumOrden(String pNumOrden) throws DAOException 
    {
        Connection con = null;
        
	PreparedStatement statement4 = null;
        PreparedStatement statementUpdate = null;
	
	ResultSet result4=null;
	HashMap hashList_=new HashMap();
	
      
        try
        {
	      con = getConnectionDB2();
	     //Query para generacion de bases para empresas de mensajeria
	    String query_="SELECT  NOD.NOMBRE_NODO,CLI.RAZON_SOCIAL,PROD.DESCRIPCION_PRODUCTO,E.NUMERO_ORDEN,E.CONSECUTIVO_ENVIO,E.CODIGO_BARRAS,E.DIRECCION_DESTINATARIO,DEP.NOMBRE_DEPARTAMENTO,MUN.NOMBRE_MUNICIPIO,CEP.NOMBRE_CENTRO_POBLADO,E.CODIGO_NODO,E.ZONA_POSTAL " +
			    "FROM PRODRAD.ENVIO E " +
			  //  "INNER JOIN PRODRAD.DOCUMENTO DOC ON DOC.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN PRODRAD.ENVIO_NOCLAS ENV ON ENV.CODIGO_BARRAS=E.CODIGO_BARRAS " +
			    "INNER JOIN PRODRAD.NODO_DISTRIBUCION NOD ON NOD.CODIGO_NODO=E.CODIGO_NODO " +
			    "INNER JOIN PRODRAD.CLIENTE CLI ON CLI.CODIGO_CLIENTE=E.CODIGO_CLIENTE " +
			    "INNER JOIN PRODRAD.PRODUCTO PROD ON PROD.CODIGO_PRODUCTO=E.CODIGO_PRODUCTO " +
			    "INNER JOIN PRODRAD.DEPARTAMENTO DEP ON DEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO " +
			    "INNER JOIN PRODRAD.MUNICIPIO MUN ON (MUN.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND MUN.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO) " +
			    "INNER JOIN PRODRAD.CENTRO_POBLADO CEP ON (CEP.CODIGO_DEPARTAMENTO=E.CODIGO_DEPARTAMENTO AND CEP.CODIGO_MUNICIPIO=E.CODIGO_MUNICIPIO AND CEP.CODIGO_CENTROP=E.CODIGO_CENTROP) " +
			    "WHERE ENV.NUMERO_ORDEN = " +pNumOrden+" "+
			    "AND ENV.CODIGO_ESTADO="+NO_CLASS_NO_GENERADO;
	    
		 
            
	    String queryUpdate_="UPDATE PRODRAD.ENVIO_NOCLAS SET CODIGO_ESTADO="+NO_CLASS_GENERADO+" WHERE NUMERO_ORDEN ="+pNumOrden+" AND CODIGO_ESTADO="+NO_CLASS_NO_GENERADO;
	    
	    //Query generacion base de empresas de mensajeria 
	    //------------------------------------------------    
	    
	    statement4=con.prepareStatement(query_);
	    statementUpdate=con.prepareStatement(queryUpdate_);
	    result4=statement4.executeQuery();
	    statementUpdate.executeUpdate();



	    while(result4.next()){


		BaseExcelDto baseDto_=new BaseExcelDto();
		int indice1=0;
		baseDto_.setNombreNodo(result4.getString(++indice1));
		baseDto_.setClienteRazonSoc(result4.getString(++indice1));
		baseDto_.setDescProducto(result4.getString(++indice1));
		baseDto_.setNumOrden(result4.getInt(++indice1));
		baseDto_.setConsecutivoEnvio(result4.getInt(++indice1));
		baseDto_.setCodBarras(result4.getString(++indice1));
		//baseDto_.setCodigoInternoCli(result4.getString(++indice1));
		baseDto_.setDireccion(result4.getString(++indice1));
		baseDto_.setDepartamento(result4.getString(++indice1));
		baseDto_.setMunicipio(result4.getString(++indice1));
		baseDto_.setCentroPoblado(result4.getString(++indice1));	
		
		String codigoNodo_=result4.getString(++indice1);
		baseDto_.setZona(result4.getString(++indice1));
		
		String key_=baseDto_.getNumOrden()+"-"+codigoNodo_;
		if(hashList_.containsKey(key_)){
		    ArrayList list_=(ArrayList)hashList_.get(key_);
		    list_.add(baseDto_);
		    //hashList_.put(key_, list_);
		}else{
		    ArrayList list_=new ArrayList();
		    list_.add(baseDto_);
		    hashList_.put(key_,list_);
		}
		
		
	    }
	    
	}catch (SQLException e)
        {
            throw new DAOException("BaseEmDAO:getBaseEmXNumOrden: " + e.toString(), e);
        }
        finally
        {
	    closeConnection(null, statementUpdate);
            closeConnection(con, statement4,result4);
        }
        return hashList_;
    }
}
